/******************************************************
Cours:   LOG121
Session: A2013
Groupe:  04
Projet: Laboratoire #4
Etudiant(e)s: Fredy Alexander Bonilla, Renaud Vincent, Simon Castro
                            
Professeur : Francis Cardinal
Nom du fichier: Image.java
Date cree: 2013-11-22
Date dern. modif. 2013-11-29
*******************************************************
Historique des modifications
*******************************************************
2013-11-22 Version1
2013-11-29 Version2
*******************************************************/

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.Observable;

import javax.imageio.ImageIO;

/**
 * Classe du modele contenant l'image sur laquelle
 * l'utilisateur veut travailler.
 * @author Simon
 *
 */
public class Image extends Observable implements Serializable {

	private static final long serialVersionUID = 1L;
	
	private transient BufferedImage image;
	private String chemin;
	private File fichier;
	
	//Test pour le moment avec une image fixe mais on devrait pouvoir modifier
	//pour pouvoir choisir dynamiquemenr l'image
	public Image(){
		this.chemin = "java.png";
		this.chargerImage();
	}
	
	/**
	 * Accesseur du chemin d'acces
	 * @return le chemin
	 */
	public String getChemin() {
		return this.chemin;
	}
	
	/**
	 * Mutateur du chemin d'acces
	 * @param chemin
	 */
	public void setChemin(String chemin) {
		this.chemin = chemin;
	}
	
	/**
	 * Methode pour charger une image
	 */
	private void chargerImage(){
		try{
			this.fichier = new File(this.chemin);
			this.image = ImageIO.read(this.fichier);
		}
		catch(IOException e){
			e.printStackTrace();
		}
	}
	
	/**
	 * Methode retournant l'image pour etre affichee dans une vue
	 * @return l'objet BufferedImage
	 */
	public BufferedImage getBufferedImage(){
		return this.image;
	}
	
	/**
	 * methode servant a ajouter un observateur sur cette classe
	 * 
	 */
	public Image getImage(){
		return this;
	}
	
	/**
	 * Methode pour remplacer une image
	 * @param fichier
	 */
	public void setImage(File fichier){
		
		try{
			this.image = ImageIO.read(fichier);
			chemin = fichier.getPath();
		}
		catch(IOException e){
			e.printStackTrace();
		}
		
		this.setChanged();
		this.notifyObservers();
	}
}
